Message Selector অ্যাপাচি অ্যাকটিভএমকিউ (Apache ActiveMQ) এর একটি শক্তিশালী বৈশিষ্ট্য, যা মেসেজ কনজিউমারদের মেসেজ ফিল্টার করার সক্ষমতা প্রদান করে। এটি একটি SQL-like query ব্যবহার করে কনজিউমারকে নির্দিষ্ট ধরনের মেসেজ গ্রহণ করতে অনুমতি দেয়। মেসেজ সিলেক্টর ব্যবহার করার মাধ্যমে, আপনি নির্দিষ্ট প্রপার্টির ভিত্তিতে মেসেজগুলো নির্বাচন করতে পারেন, যাতে শুধুমাত্র প্রয়োজনীয় মেসেজগুলোই কনজিউমার গ্রহণ করে এবং অন্য মেসেজগুলো ফিল্টার হয়ে যায়।
Message Selector হল একটি কনফিগারেবল ফিল্টার যা JMS (Java Message Service) স্পেসিফিকেশনের মধ্যে অন্তর্ভুক্ত। এটি একটি boolean expression বা filter এর মতো কাজ করে, যা মেসেজ প্রপার্টির উপর ভিত্তি করে মেসেজকে নির্বাচন বা অস্বীকার করে।
যখন একটি কনজিউমার একটি কিউ বা টপিক থেকে মেসেজ গ্রহণ করতে চায়, সে একটি সিলেক্টর প্যারামিটার যোগ করতে পারে। এটি কনজিউমারকে কেবল সেই মেসেজগুলো গ্রহণ করতে দেয় যেগুলোর প্রপার্টি তার নির্ধারিত শর্তের সঙ্গে মিলে।
যদি একটি order কিউ থাকে, যেখানে বিভিন্ন প্রকারের অর্ডার মেসেজ জমা হয় (যেমন, পেমেন্ট অর্ডার, প্রোডাক্ট অর্ডার ইত্যাদি), তাহলে কনজিউমার এমন সিলেক্টর ব্যবহার করতে পারে যাতে শুধুমাত্র প্রোডাক্ট অর্ডারগুলোই গ্রহণ করা হয়।
Message Selector হল একটি SQL-like স্ট্রিং এক্সপ্রেশন, যা WHERE
ক্লজের মতো কাজ করে। উদাহরণস্বরূপ, আপনি মেসেজের property এর মান অনুসারে একটি মেসেজ নির্বাচন করতে পারেন।
property_name = 'value'
: এটি কেবল মেসেজগুলো গ্রহণ করবে যেগুলোর নির্দিষ্ট প্রপার্টি property_name
এর মান 'value'
।property_name > value
: এটি কেবল মেসেজগুলো গ্রহণ করবে যেগুলোর নির্দিষ্ট প্রপার্টি property_name
এর মান value
এর চেয়ে বড়।property_name IN (value1, value2)
: এটি কেবল মেসেজগুলো গ্রহণ করবে যেগুলোর নির্দিষ্ট প্রপার্টি property_name
এর মান value1
বা value2
এর মধ্যে রয়েছে।ধরা যাক, একটি টপিক বা কিউতে অর্ডার সংক্রান্ত মেসেজ আসছে, এবং আপনি শুধুমাত্র priority
প্রপার্টি ৫ বা তার বেশি এমন মেসেজ নিতে চান। এর জন্য আপনি একটি সিলেক্টর ব্যবহার করতে পারেন।
import javax.jms.*;
public class MessageSelectorExample {
public static void main(String[] args) throws JMSException {
// ActiveMQ কনফিগারেশন
ActiveMQConnectionFactory connectionFactory = new ActiveMQConnectionFactory("tcp://localhost:61616");
Connection connection = connectionFactory.createConnection();
connection.start();
// সেশন তৈরি করা
Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
// ডেস্টিনেশন তৈরি করা (Queue or Topic)
Destination destination = session.createQueue("OrdersQueue");
// মেসেজ কনজিউমার তৈরি, যেখানে সিলেক্টর যুক্ত করা হয়েছে
String messageSelector = "priority > 5"; // মেসেজ সিলেক্টর
MessageConsumer consumer = session.createConsumer(destination, messageSelector);
// মেসেজ গ্রহণ করা
Message message = consumer.receive();
if (message instanceof TextMessage) {
TextMessage textMessage = (TextMessage) message;
System.out.println("Received Message: " + textMessage.getText());
}
// সংযোগ বন্ধ করা
consumer.close();
session.close();
connection.close();
}
}
এখানে:
String messageSelector = "priority > 5";
: এটি একটি সিলেক্টর শর্ত, যা কেবলমাত্র সেই মেসেজ গ্রহণ করবে যেগুলোর priority
প্রপার্টির মান ৫ এর বেশি।createConsumer(destination, messageSelector)
: এটি কনজিউমার তৈরি করবে এবং শুধুমাত্র সেই মেসেজগুলো গ্রহণ করবে যেগুলি সিলেক্টরের শর্ত পূর্ণ করবে।priority
, status
, order_type
) এর ভিত্তিতে মেসেজ নির্বাচন করতে সহায়ক।priority > 5
এমন অর্ডার মেসেজ গ্রহণ করা।status = 'pending'
মেসেজ গ্রহণ করে কেবল পেনডিং অর্ডার প্রক্রিয়া করা।eventType = 'payment'
সিলেক্টর ব্যবহার করে কেবল পেমেন্ট সম্পর্কিত ইভেন্ট মেসেজ গ্রহণ করা।temperature > 100
এর মাধ্যমে কেবলমাত্র উচ্চ তাপমাত্রার সেন্সর ডাটা গ্রহণ করা।Message Selector অ্যাপাচি অ্যাকটিভএমকিউ-তে একটি অত্যন্ত শক্তিশালী ফিচার, যা কনজিউমারদের মেসেজ নির্বাচন করার জন্য SQL-like কুয়েরি ব্যবহার করতে সাহায্য করে। এর মাধ্যমে কনজিউমাররা নির্দিষ্ট প্রপার্টির ভিত্তিতে মেসেজ ফিল্টার করতে পারে, যেমন priority
, status
, বা অন্যান্য কাস্টম প্রপার্টি। এটি পারফরম্যান্স উন্নত করতে এবং সিস্টেমে নির্দিষ্ট মেসেজ ডেলিভারি নিশ্চিত করতে সাহায্য করে।
common.read_more